package com.shujia.day15.one.obj2;

public class Skill {
    /*
        TODO 单例模式
             在全局中有且仅有一个对象 可以使用  => 当对象是单一的功能类时，
                    全局只需要唯一一个对象就可以完成功能，但是会在不同地方调用
             饿汉模式：
                在当前类被定义时,当前的对象属性的值为NULL，当对象要被获取时，就可以进行判断，如果没有值就创建
                    如果有值，那么就可以直接返回
     */
    static Skill SKILLOBJ = null;

    String desc;
    String skill;

    private Skill() {
    }

    // TODO 由于要求全局对象创建需要被控制，所以当前的构造方法 必须是 私有的
    private Skill(String desc, String skill) {
        this.desc = desc;
        this.skill = skill;
    }

    public void useSkill() {
        System.out.println(desc + "释放技能:" + skill);
    }

    // TODO 当一个线程对该方法进行调用时，可以直接对类进行加锁
    public static Skill getSkillObj(String desc, String skill) {
        if (SKILLOBJ == null) {
            SKILLOBJ = new Skill(desc, skill);
            return SKILLOBJ;
        } else {
            SKILLOBJ.desc = desc;
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            SKILLOBJ.skill = skill;
            return SKILLOBJ;
        }
    }
}
